Twitter hashtag: #esspec
便利ツール
時事ネタ
自己紹介 (近況報告)
syumai syumai.icon
Go / TSを書いて暮らしてます
TSKaigi Kansai 2024のCfP通ったので話してきます
スポンサーも通ったのでブースにもいます
iwatsurut
とくに、イベントもなく過ごしています。
code:a.html
<!DOCTYPE html>A
<html>B
<head>C
<title>Title Hello !!</title>
</head>D
<body>
Hello !!
</body>E</html>F
これ、A B C D E F 全部、body の中にくりこまれることを知って驚いている。
YAMAMOTO Yuji
前回初参加
iPad Proのディスプレイが壊れたので直したら、純正パーツじゃなかったためか音ゲーがめっちゃプレイしづらくなってしまって辛い
yebis0942
GoとTypeScriptを書いています
PC起動しなくなったのが最新のnewsです
terashima_daisuke
初参加。英語とWebの勉強になればと
業務でWeb画面に関わっているが、Vanillaばかり
個人的にReactを触っている程度
前回のあらすじ
今回は長いので略
今回の範囲
16.2.1.1 Static Semantics: Early Errors
ModuleBody : ModuleItemList
It is a Syntax Error if the ExportedNames of ModuleItemList contains any duplicate entries.
code:js
export const a = 1;
const b = 2;
export { b as a };
/*
export { b as a };
^^^^^^
SyntaxError: Duplicate export of 'a'
*/
It is a Syntax Error if any element of the ExportedBindings of ModuleItemList does not also occur in either the VarDeclaredNames of ModuleItemList, or the LexicallyDeclaredNames of ModuleItemList.
code:js
const a = 1;
var b = 2;
export { c };
/*
export { c };
^
SyntaxError: Export 'c' is not defined in module
*/
It is a Syntax Error if ModuleItemList Contains super.
code:js
super;
^^^^^
SyntaxError: 'super' keyword unexpected here
It is a Syntax Error if ModuleItemList Contains NewTarget.
code:js
new.target;
^^^^^^
SyntaxError: new.target expression is not allowed here
It is a Syntax Error if ContainsDuplicateLabels of ModuleItemList with argument « » is true.
code:js
a: {
a: 1;
}
/*
a: 1;
^
SyntaxError: Label 'a' has already been declared
*/
It is a Syntax Error if ContainsUndefinedBreakTarget of ModuleItemList with argument « » is true.
code:js
for (let i = 0; i < 10; i++) {
break a;
}
/*
break a;
^
SyntaxError: Undefined label 'a'
*/
code:js
// breakの意外な使い方
a: {
console.log(1);
break a;
console.log(2);
};
console.log(3);
/*
1
3
*/
It is a Syntax Error if ContainsUndefinedContinueTarget of ModuleItemList with arguments « » and « » is true.
ContainsUndefinedContinueTargetは、iterationSetとlabelSetの2つを受け取る。
continueの先は必ずIterationStatementを指している必要があるので、labelSetを区別されている。
code:js
a: {
console.log(1);
continue a;
console.log(2);
};
console.log(3);
/*
continue a;
^
SyntaxError: Illegal continue statement: 'a' does not denote an iteration statement
*/
It is a Syntax Error if AllPrivateIdentifiersValid of ModuleItemList with argument « » is false.
code:js
class C {
m() {
this.#b;
}
}
/*
this.#b;
^
SyntaxError: Private field '#b' must be declared in an enclosing class
*/
NOTE
code:js
globalThis.a = 1;
export default 1;
export default 2;
/*
export default 2;
^^^^^^^^^
SyntaxError: Identifier '.default' has already been declared
*/
/*
Bun (JSC)
bun m.mjs
3 | export default 2;
^
error: Multiple exports with the same name "default"
*/
ModuleExportName : StringLiteral
It is a Syntax Error if IsStringWellFormedUnicode(SV of StringLiteral) is false.
code:js
const a = 1;
export { a as '\ud842' };
/*
export { a as '\ud842' };
^^^^^^^^
SyntaxError: Invalid module export name: contains unpaired surrogate
*/
kiesel: 実装コードに対応する言語仕様をコメントで記載している処理系
Static Semantics: ImportedLocalNames ( importEntries )
ImportEntry Recordsの[[localName]]を集めて返す
ImportEntry Recordとは
import v from "mod"; のように名前を付けてimportすると作られるもの
Static Semantics: ModuleRequests
ModuleをたどってModuleSpecifierを集めて返す
code:js