Commit Graph
1708 Commits
Author SHA1 Message Date
Joseph Savona f5f9143381 [new-architecture] Reassignment-safe frozenness inference
NOTE: this improves the equivalent of "ref kind inference" in the new 
architecture. I'd appreciate review here on the algorithm in particular, but in 
general my plan is to try to implement this on the current architecture. 

The previous InferMutability reference kind inference didn't properly handle 
capturing or reassignment combined with control flow. This is a new version 
(i'll clean up to delete InferMutability entirely) that is less ambitious but 
fully accurate (i hope, hence WIP): 

* Annotates all references of frozen variables as frozen. This includes 
following reassignment, so if you do `const x = props.x; foo(x);` we know that 
`x` is frozen because it derived from a frozen value. This even works 
conditionally, so if `x` is conditionally assigned to some value derived from eg 
props, and you later use `x`, that will be marked as frozen even if it could 
have other values at runtime (since it must conservatively assume a frozen value 
flowed in at runtime). 

* Annotates references that may mutate as mutable. 

* Annotates references that are not frozen, but not mutated _at this reference 
site_, as readonly. It's possible that a readonly usage is followed by a mutable 
usage, since we don't yet know the "lifetime" of the mutability. 

The notable difference from the previous attempt is that we do not attempt to 
find the point at which a formerly-mutable values becomes readonly (and 
therefore eligible for caching). That requires pointer analysis, let's discuss 
offline.
2022-10-05 13:56:13 -07:00
Xuan Huang (黄玄) e877f89dda Allow comment annotation to be spaced
I.e. `/* readonly */` is fine too 

commit-id:1437395a
2022-10-05 13:30:25 -04:00
Xuan Huang (黄玄) 83f3999a2e Support var declaration hoisting
Var declarations were treated identical as other declarations which cause code 
relying on them getting hoisted now triggers runtime exception on TDZ. 

This diff fixed that by generating `var` for `var` so they can be hoisted as 
usual. 

commit-id:00ab02f6
2022-10-05 13:23:37 -04:00
Mofei Zhang 896ef251b4 patch makeReadOnly into playground 2022-10-03 14:37:24 -04:00
Mofei Zhang 4e0639c2dc Add makeReadOnly codegen into the compiler 2022-10-03 14:37:23 -04:00
Mofei Zhang 72775fba10 makeReadOnly implementation
Added utility package to track mutations to objects marked as "read-only".
2022-09-29 14:17:38 -04:00
Joseph Savona 3158146989 POC of new expression-oriented inference model for memoization within control-flow (#589)
* [hir] Core data types and lowering for new model

* Handle more expressions, including using babel for binding resolution

* test setup with pretty printing of ir

* Basic codegen and improved pretty printing

* avoid else block when if has no fallthrough

* emit function declarations with mapped name/params

* start of scope analysis

* saving state pre-run

* add slightly more complex example and flush out lowering/printing (jsx, new, variables)

* Various improvements:
* Convert logical expressions (|| and &&) to control flow, accounting
  for lazy evaluation semantics.
* Handle expression statements
* Improve printing of HIR for unsupported node kinds
* Handle more cases of JSX by falling by to OtherStatement to wrap
  subtrees at coarse granularity.

* improve HIR printing, lowering of expression statements

* handle object expression printing

* improve IR model for values/places along w codegen

* more test cases

* start of mutability inference

* passable but still incorrect mutability inference

* improved mutability inference, should cover most cases now

* visualization of reference graph

* correctly flow mutability backwards (have to actually set the capability)

* separate visualization in output

* consolidate on frozen/readonly/mutable capabilities

* cleanup

* conditional reassignment test (not quite working)

* hack to output svg files for debugging

* handle conditional reassignment

* improve capture analysis

* treat jsx as (interior) mutable; handle memberexpression lvalues

* lots of comments; hook return is frozen

* update main comment

* inference for switch, which reveals a bug

* fix yarn.lock
2024-03-25 10:39:47 +00:00
Xuan Huang (黄玄) a33c0b897c Initial commit 2024-03-25 10:39:47 +00:00