Prepack diagnostics

Herman Venter edited this page Sep 17, 2018 · 112 revisions

Prepack diagnostic messages provide details on why Prepack has failed to optimize something. Typically this is because of code that makes use of some environmental value that is not known to Prepack at compile time. The error messages provide more detail of the exact situation that led to such failures.

In general, a diagnostic message also points to the source code location of the expression or statement that causes the failure, a call stack for the execution that reached the error location, as well as information on how the unknown environmental value propagated to the failure location.

Messages that are generated during the symbolic (abstract) execution of code by Prepack

PP0001 to be defined (fallback for all not-yet further differentiated errors)
PP0002 might be an object with an unknown valueOf or toString method
PP0003 might not be an object, hence the in/instanceof operator might throw a TypeError
PP0004 might be an object that behaves badly for the in/instanceof operator
PP0005 might not be a function
PP0006 eval argument must be a known value
PP0007 with object must be a known value
PP0008 might be a symbol or an object with an unknown valueOf or toString or Symbol.toPrimitive method
PP0009 unknown super class
PP0010 unknown super class prototype
PP0011 property key value is unknown
PP0012 reference base value is unknown
PP0013 for in loops over unknown objects is not yet supported
PP0014 for of loops over unknown collections are not yet supported
PP0015 unknown computed property name
PP0016 global code may end abruptly
PP0017 unfrozen object leaked before end of global code
PP0018 module import may fail with an exception
PP0019 an abstract value with the same name exists.
PP0020 __optimizeReactComponentTree() React component tree (root/branch) failed
PP0021 abstract function call inside try/catch
PP0022 a class method incorrectly went through the serializeValue() code path
PP0023 Program may terminate with exception
PP0024 __optimizeReactComponentTree(rootComponent, config) has been called with invalid arguments
PP0025 unable to evaluate "key" and "ref" on a ReactElement due to an abstract config passed to createElement
PP0026 mutating an object with unknown properties, after some of those properties have already been used, is not yet supported
PP0027 case block containing a throw, return or continue is not yet supported
PP0028 toString or valueOf might return either an object or primitive
PP0029 the implies counter has exceeded the maximum value when trying to simplify abstract values
PP0030 unknown property access might need to invoke a getter/setter
PP0031 property access on unknown object
PP0032 prototype access on unknown object
PP0033 value passed to __optimize is not valid javascript function or React root component
PP0034 break or continue with target cannot be guarded by abstract condition
PP0035 break, throw or return cannot be guarded by abstract condition
PP0036 total time has exceeded the timeout time
PP0037 failed to recover from a for/while loop bail-out due to unsupported logic in loop body
PP0038 unknown descriptor attributes on deleted property
PP0039 Instant Render unsupported error
PP0040 Assumed condition cannot hold
PP0041 Set could have both failed and succeeded
PP0042 Conditional descriptor not supported
PP0043 Property might invoke a setter
PP0044 Instant Render warning
PP0045 Maximum stack depth exceeded

Messages that are only generated while optimizing functions

PP1001 additional function not defined in the global object
PP1002 optimized function may terminate abruptly
PP1003 property write conflicts with write in optimized function
PP1004 syntax error
PP1005 optimized function has parameters that are not yet supported
PP1006 Internal slot $Name modified in a nested context. This is not yet supported.
PP1007 Side-effects from mutating a property/binding or throwing
PP1008 Called __optimize in failed speculative context PP1009 Called __optimize in multiple contexts with differing effects

Informational messages

PP8000 Result of Math.random() is made deterministic via a fixed mathRandomSeed

Messages that are generated while serializing the global heap into Prepacked code

PP9000 serializer limitation

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.