| import { variable, constVariable, letVariable, functionDeclaration, classDeclaration } from "./imported-bindings-are-immutable/bindings.js" |
| import { shouldBe, shouldThrow } from "./resources/assert.js" |
| |
| shouldBe(variable, 'Cocoa'); |
| shouldThrow(() => { |
| variable = 42; |
| }, `TypeError: Attempted to assign to readonly property.`); |
| |
| shouldBe(constVariable, 'Cocoa'); |
| shouldThrow(() => { |
| constVariable = 42; |
| }, `TypeError: Attempted to assign to readonly property.`); |
| |
| shouldBe(letVariable, 'Cocoa'); |
| shouldThrow(() => { |
| letVariable = 42; |
| }, `TypeError: Attempted to assign to readonly property.`); |
| |
| shouldBe(typeof functionDeclaration, 'function'); |
| shouldThrow(() => { |
| functionDeclaration = 42; |
| }, `TypeError: Attempted to assign to readonly property.`); |
| |
| shouldBe(typeof classDeclaration, 'function'); |
| shouldThrow(() => { |
| classDeclaration = 42; |
| }, `TypeError: Attempted to assign to readonly property.`); |
| |
| |
| function reference(read) { |
| if (read) |
| return letVariable; |
| else |
| letVariable = "Cocoa"; |
| } |
| noInline(reference); |
| |
| for (var i = 0; i < 10000; ++i) |
| reference(true); |
| |
| shouldThrow(() => { |
| reference(false); |
| }, `TypeError: Attempted to assign to readonly property.`); |