extract statement types into separate files

This commit is contained in:
Dave Holoway
2020-06-17 11:26:48 +01:00
parent 143a31b0c4
commit d85f49546a
18 changed files with 199 additions and 68 deletions

View File

@@ -16,6 +16,7 @@ const { TokenList } = require("./TokenList");
const { AnyMethod, AnyType, AnyValue, ArrayLiteral, Label, LiteralNumber, LiteralValue, Local,
MethodDeclarations, ResolvedIdent, Value, } = require("./body-types");
const { resolveImports, resolveSingleImport } = require('../java/import-resolver');
const { ArrayIndexExpression } = require("./expressiontypes/ArrayIndexExpression");
const { BinaryOpExpression } = require("./expressiontypes/BinaryOpExpression");
const { BracketedExpression } = require("./expressiontypes/BracketedExpression");
@@ -28,6 +29,22 @@ const { MethodCallExpression } = require("./expressiontypes/MethodCallExpression
const { TernaryOpExpression } = require("./expressiontypes/TernaryOpExpression");
const { ThisMemberExpression } = require("./expressiontypes/ThisMemberExpression");
const { AssertStatement } = require("./statementtypes/AssertStatement");
const { Block } = require("./statementtypes/Block");
const { BreakStatement } = require("./statementtypes/BreakStatement");
const { ContinueStatement } = require("./statementtypes/ContinueStatement");
const { DoStatement } = require("./statementtypes/DoStatement");
const { EmptyStatement } = require("./statementtypes/EmptyStatement");
const { ForStatement } = require("./statementtypes/ForStatement");
const { IfStatement } = require("./statementtypes/IfStatement");
const { InvalidStatement } = require("./statementtypes/InvalidStatement");
const { ReturnStatement } = require("./statementtypes/ReturnStatement");
const { SwitchStatement } = require("./statementtypes/SwitchStatement");
const { SynchronizedStatement } = require("./statementtypes/SynchronizedStatement");
const { ThrowStatement } = require("./statementtypes/ThrowStatement");
const { TryStatement } = require("./statementtypes/TryStatement");
const { WhileStatement } = require("./statementtypes/WhileStatement");
/**
* @typedef {SourceMethod|SourceConstructor|SourceInitialiser} SourceMC
* @typedef {SourceType|SourceMC} Scope
@@ -424,73 +441,6 @@ function statement(tokens, mdecls, method, imports, typemap) {
return new InvalidStatement();
}
class Statement {}
class EmptyStatement extends Statement {}
class SwitchStatement extends Statement {
/** @type {ResolvedIdent} */
test = null;
cases = [];
caseBlocks = [];
}
class Block extends Statement {
statements = [];
}
class TryStatement extends Statement {
resources = [];
block = null;
catches = [];
}
class IfStatement extends Statement {
test = null;
statement = null;
elseStatement = null;
}
class WhileStatement extends Statement {
test = null;
statement = null;
}
class BreakStatement extends Statement {
/** @type {Token} */
target = null;
}
class ContinueStatement extends Statement {
/** @type {Token} */
target = null;
}
class DoStatement extends Statement {
test = null;
block = null;
}
class ReturnStatement extends Statement {
expression = null;
}
class ThrowStatement extends Statement {
expression = null;
}
class InvalidStatement extends Statement {}
class ForStatement extends Statement {
/** @type {ResolvedIdent[] | Local[]} */
init = null;
/** @type {ResolvedIdent} */
test = null;
/** @type {ResolvedIdent[]} */
update = null;
/** @type {ResolvedIdent} */
iterable = null;
/** @type {Statement} */
statement = null;
}
class SynchronizedStatement extends Statement {
/** @type {ResolvedIdent} */
expression = null;
/** @type {Statement} */
statement = null;
}
class AssertStatement extends Statement {
expression = null;
message = null;
}
/**
* @param {Token[]} modifiers
* @param {TokenList} tokens

View File

@@ -1,6 +1,6 @@
/**
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
* @typedef {import('../tokenizer').Token} Token
* @typedef {import('../statementtypes/Block').Block} Block
*/
const { Expression } = require("./Expression");

View File

@@ -0,0 +1,8 @@
const { Statement } = require("./Statement");
class AssertStatement extends Statement {
expression = null;
message = null;
}
exports.AssertStatement = AssertStatement;

View File

@@ -0,0 +1,8 @@
const { Statement } = require("./Statement");
class Block extends Statement {
/** @type {Statement[]} */
statements = [];
}
exports.Block = Block;

View File

@@ -0,0 +1,11 @@
/**
* @typedef {import('../tokenizer').Token} Token
*/
const { Statement } = require("./Statement");
class BreakStatement extends Statement {
/** @type {Token} */
target = null;
}
exports.BreakStatement = BreakStatement;

View File

@@ -0,0 +1,11 @@
/**
* @typedef {import('../tokenizer').Token} Token
*/
const { Statement } = require("./Statement");
class ContinueStatement extends Statement {
/** @type {Token} */
target = null;
}
exports.ContinueStatement = ContinueStatement;

View File

@@ -0,0 +1,14 @@
/**
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
* @typedef {import('./Block').Block} Block
*/
const { Statement } = require("./Statement");
class DoStatement extends Statement {
/** @type {ResolvedIdent} */
test = null;
/** @type {Block} */
block = null;
}
exports.DoStatement = DoStatement;

View File

@@ -0,0 +1,6 @@
const { Statement } = require("./Statement");
class EmptyStatement extends Statement {
}
exports.EmptyStatement = EmptyStatement;

View File

@@ -0,0 +1,21 @@
/**
* @typedef {import('../body-types').Local} Local
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
* @typedef {import('../tokenizer').Token} Token
*/
const { Statement } = require("./Statement");
class ForStatement extends Statement {
/** @type {ResolvedIdent[] | Local[]} */
init = null;
/** @type {ResolvedIdent} */
test = null;
/** @type {ResolvedIdent[]} */
update = null;
/** @type {ResolvedIdent} */
iterable = null;
/** @type {Statement} */
statement = null;
}
exports.ForStatement = ForStatement;

View File

@@ -0,0 +1,15 @@
/**
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
*/
const { Statement } = require("./Statement");
class IfStatement extends Statement {
/** @type {ResolvedIdent} */
test = null;
/** @type {Statement} */
statement = null;
/** @type {Statement} */
elseStatement = null;
}
exports.IfStatement = IfStatement;

View File

@@ -0,0 +1,6 @@
const { Statement } = require("./Statement");
class InvalidStatement extends Statement {
}
exports.InvalidStatement = InvalidStatement;

View File

@@ -0,0 +1,11 @@
/**
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
*/
const { Statement } = require("./Statement");
class ReturnStatement extends Statement {
/** @type {ResolvedIdent} */
expression = null;
}
exports.ReturnStatement = ReturnStatement;

View File

@@ -0,0 +1,4 @@
class Statement {
}
exports.Statement = Statement;

View File

@@ -0,0 +1,13 @@
/**
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
*/
const { Statement } = require("./Statement");
class SwitchStatement extends Statement {
/** @type {ResolvedIdent} */
test = null;
cases = [];
caseBlocks = [];
}
exports.SwitchStatement = SwitchStatement;

View File

@@ -0,0 +1,13 @@
/**
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
*/
const { Statement } = require("./Statement");
class SynchronizedStatement extends Statement {
/** @type {ResolvedIdent} */
expression = null;
/** @type {Statement} */
statement = null;
}
exports.SynchronizedStatement = SynchronizedStatement;

View File

@@ -0,0 +1,11 @@
/**
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
*/
const { Statement } = require("./Statement");
class ThrowStatement extends Statement {
/** @type {ResolvedIdent} */
expression = null;
}
exports.ThrowStatement = ThrowStatement;

View File

@@ -0,0 +1,15 @@
/**
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
* @typedef {import('./Block').Block} Block
*/
const { Statement } = require("./Statement");
class TryStatement extends Statement {
/** @type {ResolvedIdent[]} */
resources = [];
/** @type {Block} */
block = null;
catches = [];
}
exports.TryStatement = TryStatement;

View File

@@ -0,0 +1,14 @@
/**
* @typedef {import('../body-types').ResolvedIdent} ResolvedIdent
* @typedef {import('./Block').Block} Block
*/
const { Statement } = require("./Statement");
class WhileStatement extends Statement {
/** @type {ResolvedIdent} */
test = null;
/** @type {Statement} */
statement = null;
}
exports.WhileStatement = WhileStatement;