►
From YouTube: SES Meeting: Property Override Allowance
Description
Mathieu presents an idea of how to overcome the property override mistake.
A
Is
frozen,
making
that
faster
and
maybe
getting
the
avoiding
the
property
override
hazard
in
the
language
and
matthew
has
the
floor.
B
All
right,
so,
while
I
I
had
an
idea,
let
me
actually
share
my
screen.
B
B
B
Nobody
wants
to
call
defend
property
everywhere,
and
this
is
a
problem
for
frozen
intrinsics,
because
or
or
hardening
things,
because
now
a
new
prototype
chain
has
those
completely
frozen
and
dust
non-writable
properties
that
can
no
longer
be
assigned
in
through
equal.
B
Did
I
did
I
capture
that
right?
Anyone
was
that
clear
enough
for
what
the
override
mistake
is.
B
Okay,
so
the
issue
is.
B
The
issue
with
addressing
the
override
mistake
is
that
some
code
actually
relies
on
this
behavior.
It's
been
like
that
for
years
now,
so
anything
that
existing
code
does
shouldn't
be
able
to
trigger.
It
should
keep
continue,
triggering
this
behavior.
B
B
Put
the
prototype
object
in
a
certain
mode
where
now,
when
you
do
an
assignment
through
an
object
that
has
that
pro
that
has
that
frozen
object
on
the
prototype
does
not
trigger
the
the
the
prevention
of
sets
and
can
and
ends
up
doing
a
define
on
the
target
itself.
B
The
idea
that
I
had
was
to
introduce
a
sort
of
a
private
field
on
objects
to
cache
the
integrity
level
of
the
of
an
object.
So
the
idea
is
that
you
would
freeze
object.prototype,
for
example,
asking
for
the
integrity
level
to
be
cached
in
a
in
a
private
slots
on
on
the
object.
So
I
I
in
something,
for
example,
like
I
named
it
cache
integrity
that
allows
you
to
do
two
things.
B
First,
that
allows
you
to
do
the
when
you
do
a
nest
frozen
check
instead
of
checking
calling
is
prevent.
What
is
it
again
is
extensible
and
check
all
that
all
the
old
keys
descriptors
are
all
non-configurable.
So
basically,
it's
frozen
currently
walks
the
prototype
chain
and
the
object
verified
that
nothing
is
extensible
and
nothing
is
it
doesn't.
B
It
doesn't,
it
works
all
the
proper
properties
heard
in
those
frozen.
It's
frozen
checks.
The
object
checks
that
the
prototype
check,
that
it's
not
extensible
and
checks
that
all
property
descriptors
are
non-configurable
and
non-writable.
C
So
I
have
a
question
about
the
proposal
already,
which
is
just
taking
that
part
of
your
proposal
by
itself.
Isn't
that
already
an
optimization
that
engines
can
do
and
probably.
B
This
I
I
actually
write
it
here.
This
is
only
relevant
in
the
case
of
exotics,
like
proxies,
because
an
implementation
can
already
do
this,
because
it
would
be
non-observable
for
regular
objects.
The
regular
objects
would
not
be
able
to
observe
this.
C
C
B
Now
the
second
step
is
now
that
we
have
a
flag
on
the
object.
That
is
the
result
of
a
new
path
in
the
execution.
We
can
check
that
flag,
which
is
the
cash
integrity
level
during
the
ordinary
set
with
own
descriptor
and
maybe
I'll
go
to
expect,
but
in
the
own
set
ordinary
set
within
descriptor
it
recurses
into
the
sets
of
the
prototype
until
it
reaches
the
prototype
object
where
that
property
is
defined.
B
At
that
point,
it
checks
if
it's
a
data
property
or
if
it's
a
setter
or
getter
and
or
problem,
has
always
been
with
the
data
property.
B
So,
instead
of
doing
this
simple
check
here
is
data
descriptor
and
indescribable
false
there
would
be.
A
preliminary
check
is
the
cash
integrity?
Is
there
a
cash
integrity
that
is
not
frozen,
then?
Do
the
writable
check
if
it's
not
if
it
is
set
as
frozen,
we
basically
fall
through
and
following
through
means
defining
on
the
on
the
target
objects.
C
Another
question
so
in
order
for
since
this
creates
two
observable
differences,
the
proxy
one
that
I
and
and
this
one,
the
implementations
that
do
the
optimization
for
regular
objects
currently
could
not
use
this
flag
as
the
state
further
optimization.
This
flag
would
have
to
be
distinct
from
any
internal
optimization
they're,
currently
already
doing,
because
the
current
optimization
does
not
have
this
observability.
C
B
Array,
the
one
plus
the
other
not
still
correct
the
the
new,
my
cash
integrity
slots
would
imply
cashing,
but
internal
cashing
would
not
imply
cash
integrity.
B
C
Right,
because,
if
you
just
if
the
implementation
is
just
you
know
doing
a
internal
caching
of
the
result
of
an
is
frozen
check,
it
would
not
be
using
this
cache.
B
We
can
backshade
the
name,
but
the
idea
it's
like
it's
cash
integrity
level.
Plus
I
opt-in
for
fixing
the
the
return,
the
property
they
have.
The
override
mistake
to
many
overrides.
C
B
You
say
freeze
and
then
you
pass
a
second
argument
with
an
options
bag
which
has
something
to
be
like
shed
here.
I
put
it
cache
integrity,
but
we
can
like
shift
exactly.
C
Okay,
so
so
so
it's
okay,
and
if
you
do
this
on
an
object
that
is
already
frozen.
B
It
will
do
the
existing
its
frozen
checks
and
then
remember
it.
C
Okay-
and
I.
B
B
And
the
thing
is
now
once
you've
done,
that
the
proxy
will
not
be
able
to
observe
it
being
frozen
again
or
checked
for
freezing.
C
Okay,
so
so
two
two
further
questions
one
is:
do
you
imagine
that
harden
would
be
doing
this?
Their
harden
is
a
deep
application
of
this
variety
of
fruits.
C
So
so,
given
that
harden
is,
is
is
doing
this
variety
recursively.
Anything
that's
freezing
by
hardening
would
actually
remain
safe.
B
It's
it's!
It's
not
really
observable,
because
a
proxy
wouldn't
so
the
only
case
where
it
matters
is
a
proxy
and
the
proxy
traps
wouldn't
trigger
anymore.
So
so
you
already
need
a
side
channel
for
communicating
that
the
proxy
traps
were
triggered
to
verify
that
the
proxy
traps
were
triggered.
C
It's
the
change
in
override
behavior,
if
the
one
click
alice
and
bob
both
share
a
a
frozen
data,
object
that
that,
in
today's
spec
is
immutable
and
therefore
does
not
enable
them
to
communicate.
B
Yes,
they
can
flip
one
bit
once
and
and
communicate
through
that
you're
right.
Well,
we.
B
I
see
I
did
not
see
that
right.
There
is,
you
can
pass
an
object
and
you
can
test
it
for
whether
it
triggers.
B
Mistake
and
then
you
can
see
when
that
changes
interesting.
B
Yeah
and
we
could
we
could
tame
object.freeze
to
always
include
this
flag.
C
B
It
will
not
short-circuit
it
will
it
will.
It
will
prevent
this
flag
in
case
that
object
has
been
frozen,
that
certain
way,
so,
instead
of
just
checking,
is
that
description.
I
found
writable
and
just
the
board
right
away
it
will.
It
will
only
consider
that,
if
that
object
has
been
frozen,
if
that
prototype
object
has
been
frozen
in
that
way,.
C
Oh,
is
there
any
reflective
query?
Behavior
right
I
mean
is
extensible
is
a
reflective
operation
for
querying
whether
the
object
is
extensible
right?
It.
B
Reflect
is
extensible,
I
said
the
reflective
sensible
just
triggers
the
is
extensible.
So
sorry,
yes,
it
would.
The
the
ch
is
extensible
check
would
be
test
integrity
level.
So
this
is
the
one
that
would
be
changed
test.
Integrity
level
is
the
one
that
is
triggered.
So
is.
B
B
Testing
degradation:
it's
an
abstract
operation
that
is
used
by
it's
frozen
is
sealed,
and
I
am
so
much
surprised
that
it
is
not
used
by
reflects
that
is.
C
B
C
No!
No,
if
you,
if
the
target
of
the
proxy
is
frozen
versus
specially
us.
B
Okay,
so
you're
concerned
that
a
target
has
been
already
frozen
in
the
in
that
mode
and
we're
creating
a
proxy
for
that
objects
and
you're,
saying
that
the
the
proxy
should
behave
the
same
way
instead.
A
We
have
a
question
from
alex:
yes,
matthew,
I'm
thinking
of
this
as
a
counting
problem
in
a
sense
or
a
counting
problem.
I'm
thinking
about
it
in
the
case
where
somebody
basically
does
object.
A
Dot,
set
property
descriptor,
I'm
sorry
reflect
that
define
property
and
the
set
is
configurable
to
false
and
is
writable
to
false,
and
they
do
that
repeatedly
and
then
they
implement
the
other
steps
that
freeze
does,
but
they
don't
directly
call
freeze,
I'm
thinking
that,
every
time
that
a
property
is
set
to
not
configurable
and
not
writeable,
you
might
have
basically
a
counter
that
decrements
one
to
say:
hey.
A
We
have
this
many
properties
that
are
available,
I'm
sorry
that
are
configurable,
slash,
writable
and
including
that
count
whether
the
object
is
extensible
and
whether
the
object
has
the
ability
to
have
the
prototype
set
and
once
the
counter
reaches
zero
you're
frozen.
A
So
I'm
wondering
if
cached
integrity
might
be
a
simple
counter
structure
of
some
kind.
B
The
problem
is
to
make
sure
we
set
that
flag
on
the
object,
through
only
a
new
mean,
a
new
api
or
an
existing
api's
extension.
If
you
go
in
and.
B
A
B
The
motivation
was
for
me
to
find
a
way
to
set
a
flag
on
the
object
saying
it
is
okay,
when
you,
if
you
encounter
a
property
on
on
on
an
object
that
has
this
flag,
do
not
trigger
the
override
mistake,
and
this
has
to
come
from
a
new
api
service,
because
the
existing
code
cannot
cannot
trigger
it.
Well,.
B
C
B
B
Bit
to
say
that
it
shouldn't
be,
it
shouldn't
automatically
be
transparent.
That.
B
You
would
have
to
you
would
have
to
freeze
the
proxy
object
explicitly
that
way
for
for
it,
for
the
proxy
object
to
behave.
That
way.
C
No,
the
thing
is,
let's
say:
you've
got
a
yellow
proxy
for
a
blue
object,
that's
normally
frozen
right,
and
then
you
have
a
let's
say
the
so
the
blue
object
is
blue,
alice,
the
yellow
proxy
is
alice
prime
and
then
you
have
a
yellow
bob,
which
is
a
normal
object
that
inherits
from
yelp
from
yellow,
alice,
prime
and
and
then
somebody
tries
to
assign
it
to
the
property
foo
on
yellow
bob.
C
So
that's
going
to
go.
Go
up
to
the.
B
So
if
you
look
in
the
recursion
here,
if
it's,
if
their
own
description
isn't
defined,
then
you
go
get
the
prototype
of
your.
You
get
your
parents
and
it's
not
null.
You
trigger
the
set
trap,
so
you
will
end
up
triggering
the
set
track
of
your
proxy
objects.
Now
you
will
just.
C
C
B
So
it
starts
at
what
was
the
abstract
operation
name
where
it
starts.
I
think
it's
define
or.
B
D
D
B
B
Ordinary
set
gets,
the
own
description,
doesn't
have.
D
B
Right
so
ordinary
set
within
descriptor
will
be
called
with
bob
the
property
name,
the
value
that
we
want
to
set
the
receiver,
which
is
which
should
also
be
bob.
Both
an
o
and
receiver,
will
be
that
and
own
desk
will
be
no
right,
so
own
desk
is
undefined.
B
So
we
go
into
the
parents,
which
is
a
prototype.
Okay,
we
get
the
product,
there
is
a
parent,
the
parent,
the
proxy
object
correct
correct,
so
we
call
parent
sets
the
property
so
who
value
whatever
and
the
receiver
is
still
bob
right
proxy
sets.
B
It's
called
and
we
assume
there's
a
trap
or
there's
no
trap.
What
is
the.
B
C
B
Okay,
so
we
call
the
trap,
we
we
see
that
the
target
would
be.
We
get
the
description
of
the
real
target.
It
is
actually
the
shadow
target.
B
I
I
understand,
I'm
I'm
trying
to
figure
out
what
the
states
of
the
things
are.
The
real
targets
real
alice
in
in
in
the
target
world
is
fully
frozen
right.
C
When,
when
we
once,
we've
walked
through
the
normal
frozen
case,
then
then
the
next
time
so
with
the
setting
of
foo
at
the
point
that
that
we
did
bob
dot
foo
equals
eight
al
blue
alice
was
normally
frozen.
C
Once
we've
done
that
and
returned,
then
we're
going
to
set
bob
dot
bar
equals
nine,
but
but
before
we
did
that
somebody
in
the
blue
world
put
blue
alice
into
this
new
integrity
level.
B
Okay,
so
blue
alice
is
frozen,
so
we
will
call
the
trap
the
trap.
Will,
I
assume,
will
try
to
do
something
like
reflect
dot
sets.
Yes,.
B
It
triggers
the
regular
sets
on
the
target.
B
The
receiver
would
have
been
what
would
be
the
receiver
in
this
case,
the.
B
Okay,
so
now
we
end
up
back
where
we
started
well,
we
can
go
back
to
sets
ordinary
sets
ordinary
sets
with
one
descriptor.
There
is
a
known
descriptor
this
time.
The
receiver,
as
we
said,
is
the
blue
proxy
for
yellow
bob,
and
oh
here
is
blue
alice,
correct.
B
Okay,
there
is
an
on
descriptor,
it's
a
data
descriptor,
the
own
disk
writable
is
false.
Yep,
I
believe,
there's
a
bug
in
this
in
the
bug
in
the
spec
here.
It
should
only
return
false
if
the
value
is
different.
It
shouldn't
it
shouldn't
cause
an
error
if,
if
it's
the
same
value
that
we're
trying
to
write.
B
Yeah,
I
believe
the
spec
doesn't
represent
reality.
I
actually
noted
that.
Okay,
let's
assume
the
actual
behavior
here,
I.
D
C
B
So
nothing
here
it
should.
It
should
see
that
the
description
matches
if
the
stake
was
correct
and
just
return
true,
correct.
Okay,
so.
C
B
C
B
Yes,
correct:
it's,
it
will
return
false,
so
reflect
will
return
false.
B
C
B
Correct?
Which.
B
It's
not
actually
set
it's.
Whoever
calls
sets
and
that's
the
place
where
we
actually
should.
D
C
Yeah,
so
we
I
think
we
can
just
assume
it
but
you're
correct
that
does
not
throw
set
returns
false
and
the
reason
we
did
that
by
like
I
can
give
you
the
historical
perspective
on
that.
The
reason
we
did,
that
is
a
sloppy
assignment,
does
not
throw,
but
the
set
trap
should
not
be
able
to
sense
whether
the
assignment
was
sloppy
or
strict.
C
That
again,
the
a
sloppy
assignment
that
fails
does
not
throw,
but
the
handler
trap
should
not
be
able
to
sense
whether
the
assignment
was
sloppy
or
strict.
I
see
and
therefore
the
trap
always
just
indicates
failure
by
returning
false
and
it's
up
to
the
syntactic
construct,
whether
or
not
to
turn
that
into
a
throw,
depending
on
whether
the
its
strict
syntax
or
sloppy
syntax.
B
So
let's
get
back-
and
I
think
this
will
work
from
what
I
already
ran
into
my
head
so
now
or
blue
ls
is
frozen
into
that
state.
That
happened
somewhere
on
the
blue
side.
So
yeah
proxy
is
not
aware
of
this
correct.
We
get
through
the
steps.
We
still
don't
have
a
known
description
for
for
bob,
so
we
get
the
prototype,
which
is
gonna,
be
the
proxy
for
our
list.
B
We
call
sets,
which
is
gonna,
be
the
proxies
set
trap
again
as
before
the
proxy
set
trap.
We'll
call
reflect.sets
on
blue
alice
reflect.sets
on
blue
alex
will
end
up
calling
ordinary
sets
within
descriptor,
with
o
being
blue
alice
bar
value,
whatever
receiver
blue
proxy
for
yellow
bob,
correct
and
unknown
description.
D
B
Has
this
flag
set
on
the
blue
alice,
so
it
will
trigger
a
it,
will
fall
through
and
do
a
the
steps
here
which
are
to
define
own
property
on
the
receiver.
C
C
So
there's
only
one
remaining
problem
that
I
can
see
in
this
scenario,
but
I'm
very
pleased
that
where
we
are
the
remaining
problem
is
that
you
want
to-
and
I
presume
that
you
would
like
to
add
to
the
object
in
variants
that
wants
a
no.
I
suppose
you
don't
need
to.
No
you
don't
it's
not
a
it's,
not
a
stability
commitment,
it's
just
a
behavior
which
means
that
the
proxy
could
act
like
it's
specially
frozen
at
one
point
and
then
go
back
to
acting
like
it's
normally
frozen.
That's
weird!
C
No,
I
think
I
think
I
think
you
need
to.
I
think
there
needs
to
be
a
stability
commitment
here.
C
Yeah,
so
so
right
now
we're
doing
all
the
bookkeeping
to
enforce
that
the
handler
cannot
violate
the
stability
commitments
by
saying
that
the
that,
in
order
to
act
in
such
a
way
as
to
be
consistent
with
the
stability
commitment,
you
have
to
make
the
shadow
target
stable
in
that
way.
B
And
if
we
trigger
freeze
on
if
we
trigger
freeze
special
on
the
proxy
object
itself,
we
flag
the
proxy
object
itself
and
then
this
the
proxy
will
not
be
able
to.
We
will
not
go
through
this
mechanism
anymore.
C
So
that
that's
not
the
case,
I'm
concerned
about
the
case,
I'm
concerned
about,
is,
if
alice
is
now
specially
frozen.
B
C
The
proc
and
but
there's
a
shadow
target
alice,
which
is
the
shadow
targets,
are
yellow.
The
shadow
target
from
blue
object
is
itself
yellow,
so
there's
a
shadow
target,
yellow
alice,
alice,
double
prime
or
alice
shadow
target.
Let's
just
say,
aloe
shadow
shadow
out,
so
shadow
alice
is
not
specially
frozen
in
order
to
represent
you
know.
C
The
proxy
did
know
enough
that
when
it
saw
that
that
real
alice
was
frozen,
that
the
proxy
would
normally
freeze
shadow
alice,
but
when
the
real
alice
is
specially
frozen,
the
proxy
never
knows
enough
to
specially
freeze
alice,
and
maybe
that
doesn't
matter.
B
I
don't
think
it
matters
we.
I
guess
we
could
imagine
passing
the
special
freeze
request
in
the
prevent
extensions
trap.
C
C
Now,
the
proxy,
the
proxy
is
able
to
find
out
what
the
stability
properties
are
of
the
real
alice,
not
by
causing
the
real
alice
to
be
stable,
but
but
just
asking
how
is
real,
alice,
stable
and
then
making
shadow
alice
stable
in
the
same
way
that
real
alice
is
stable,
but
when
real
analyst
is
specially
frozen,
that's
an
additional
degree
of
stability
that
the
proxy
cannot
ask
about
and
because
the
proxy
cannot
ask
about
it,
never
knows
that
it
should
make
shadow
alice
specially
frozen
and
like
I
like,
and-
and
you
know
and
and
it
sounds
like-
maybe
that's-
okay,
because
we're
not
making
this
additional
level
of
stability
into
an
object
invariant
that
needs
to
be
enforced
and
therefore
the
proxy
we're
allowing
it
to
act
at
one
moment
in
time
like
an
object,
that's
specially
frozen
and
then
act
at
a
later
moment
in
time
like
an
object.
B
And
it
always
could
it
always
could
decide
to
do
whatever
it
wanted.
On
on
the
sets
like
the
only
requirement
that
was
on
existing
on
the
sets
was
that
if
the
set
would
fail
it
has
to
fail,
it
doesn't
say
that
if
the
set
was
to
succeed,
it
had
to
succeed.
C
Yeah,
so
let's
just
make
sure
this,
the
in
the
part
of
the
spec,
where
the
proxy
checks
the
handler
response
against
the
shadow
target
to
enforce
invariants.
If
the
set
trap
returns
false.
C
C
B
D
D
We
do
not
call
this
set
across
the
membrane
to
complete
the
operation
on
the
other
side,
which
in
this
case
was
from
from
when
you
walk
from
bob
to
his
prototype,
and
then
you
do
a
set
on
that
prototype
a
reflector
set.
We
don't
do
that.
We
actually
emulate
the
algo
that
you
were
showing
they.
They
are
able
to
set
the
ordinary,
the.
D
I
don't
remember
the
name
of
it,
but
we
emulate
that
album,
because
we
we
have
certain
restrictions
in
terms
of
what
can
be
observed
by
the
other
side,
specifically
what
we
call
the
the
prevent
mutations
on
the
other
side.
So
basically
saying
bob
has
no
ability
to
ever
change
anything
on
on
the
blue
side.
D
B
D
In
this
case,
because
that's
what
triggers
it
said
never
seen
by
the
blue
side,
we
we
emulate
this
algorithm.
D
Right
right,
so
the
distortion
plays
a
role
there,
but
I
think,
even
if
you
don't
have
distortions
you're,
just
saying
whatever
bob
is
trying
to
do,
only
bob
can
see
and
he'd
never
get
to
reflect
to
alice.
So
alice
will
never
see
what
bob
is
trying
to
do.
C
D
To
avoid
bob
to
be
able
to
do
any
kind
of
poisoning
or
any
kind
of
mutation
that
can
affect
alice
integrity,
but
regardless
of
that,
the
this
protection
mechanics
that
we
use
in
some
scenarios
and
we
don't
use
it
in
knowledge
and
others.
D
We
use
it
in
some
scenarios,
has
these
algo
being
implemented
manually
by
our
membrane,
so
it
basically
goes
all
the
way
up
to
the
protochain
and
finding
if
there
is
a
descriptor
or
not
and
then
determine
what,
where
to
what
to
do
with
the
operation
that
you're
trying
to
do,
and
so
on,
on
the
yellow
side,
never
cross
into
the
blue
side
only
to
check
for
things
on
the
blue
side.
So
that
would
be
a
problem
for
us.
B
I
think,
in
your
case,
if
someone
calls,
the
problem
is
really
if
someone
calls
freeze
on
that
prototype
objects
with
this
special
mode
and.
D
D
The
the
general
realm
does
preserve
the
ali's
or
reflects
alex
at
his
behavior.
So
if
alice
has
anything
that
is
frozen,
whether
that's
a
regular
frozen
or
the
new
one,
it
needs
to
reflect
it.
B
I
assume
you're
checking
if
alice
is
frozen
or
if,
if
that
property
is
writable
or
not,.
D
I
think
it's
it's
just
a
matter
of
trying
to
understand.
If
you
have
that
new
step
into
2a,
that's
what
you're
proposing.
Yes,
you
add
a
new
one
to
a
what
will
be
the
implications
of
running
code
that
does
not
have
that
check.
B
D
B
Blue
object
is
a
is
an
ordinary
object,
so
that
doesn't
matter
the
case
really
matters.
If
your
blue
object
is
a
proxy.
B
D
And
then
the
reason,
by
the
way,
the
reason
why
we
do
that
is
like
when
we
have
code
running
in
yellow
that
is
attempting
to
modify
anything
in
the
object
graph
of
blue,
whether
that's
modifying
a
proto,
a
prototype
of
an
object
or
modifying
a
anything
on
that
object,
grab
that
that
only
that
that
operation
will
succeed,
but
it
will
never
modify
blue.
It
will
only
modify
yellow
so
all
the
prototypes
that
are
shared,
whether
that's
dom
apis
or
language
apis
or
whatever
it
doesn't
matter.
C
B
Well,
I
guess
anyway
we're
out
of
time.
I
I
I
guess
we
need
to
just
think
about
what
it
would
mean
in
the
case
of
distortions
like
this.
A
All
right,
yeah,
that's
a
meeting.
Thank
you
very
much
for
this
conversation,
matthew
and
and
see
some
of
you
at
the
endo
meeting
have
a
good
day.