Skip to content

Commit

Permalink
[cleanup] Refactor introducing FuName.
Browse files Browse the repository at this point in the history
  • Loading branch information
pfusik committed Apr 20, 2024
1 parent 1b7e466 commit ad6c819
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 49 deletions.
14 changes: 8 additions & 6 deletions AST.fu
Original file line number Diff line number Diff line change
Expand Up @@ -335,14 +335,18 @@ public abstract class FuExpr : FuStatement
public virtual bool IsNewString(bool substringOffset) => false;
}

public abstract class FuSymbol : FuExpr
public abstract class FuName : FuExpr
{
internal string() Name = "";
public override int GetLocLength() => this.Name.Length;
}

public abstract class FuSymbol : FuName
{
internal FuId Id = FuId.None;
internal string() Name = ""; // TODO: for host-diff - why?
internal FuSymbol!? Next;
internal FuScope!? Parent;
internal FuCodeDoc#? Documentation = null;
public override int GetLocLength() => this.Name.Length;
public override string() ToString() => this.Name;
}

Expand Down Expand Up @@ -575,12 +579,10 @@ class FuImplicitEnumValue : FuExpr
public override int IntValue() => this.Value;
}

public class FuSymbolReference : FuExpr
public class FuSymbolReference : FuName
{
internal FuExpr#? Left = null;
internal string() Name;
internal FuSymbol!? Symbol;
public override int GetLocLength() => this.Name.Length;
public override bool IsConstEnum() => this.Symbol.Parent is FuEnum;
public override int IntValue()
{
Expand Down
2 changes: 0 additions & 2 deletions Parser.fu
Original file line number Diff line number Diff line change
Expand Up @@ -987,8 +987,6 @@ public class FuParser : FuLexer
AddSymbol(this.Host.Program, klass);
if (Eat(FuToken.Colon))
ParseSymbolReference(klass.BaseClass);
else
klass.BaseClass.Name = "";
Expect(FuToken.LeftBrace);

while (!See(FuToken.RightBrace) && !See(FuToken.EndOfFile)) {
Expand Down
2 changes: 1 addition & 1 deletion editors/vscode/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class VsCodeDiagnostics extends VsCodeHost
super.reportError(filename, line, startUtf16Column, endUtf16Column, message);
const fileDiagnostics = this.#diagnostics.get(filename);
if (fileDiagnostics !== undefined)
fileDiagnostics .push(new vscode.Diagnostic(new vscode.Range(line, startUtf16Column, line, endUtf16Column), message));
fileDiagnostics.push(new vscode.Diagnostic(new vscode.Range(line, startUtf16Column, line, endUtf16Column), message));
}

parse(filename: string, input: Uint8Array, parser: FuParser): void
Expand Down
9 changes: 1 addition & 8 deletions libfut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1167,7 +1167,7 @@ bool FuExpr::isNewString(bool substringOffset) const
return false;
}

int FuSymbol::getLocLength() const
int FuName::getLocLength() const
{
return std::ssize(this->name);
}
Expand Down Expand Up @@ -1462,11 +1462,6 @@ int FuImplicitEnumValue::intValue() const
return this->value;
}

int FuSymbolReference::getLocLength() const
{
return std::ssize(this->name);
}

bool FuSymbolReference::isConstEnum() const
{
return dynamic_cast<const FuEnum *>(this->symbol->parent);
Expand Down Expand Up @@ -4182,8 +4177,6 @@ void FuParser::parseClass(std::shared_ptr<FuCodeDoc> doc, int line, int column,
addSymbol(this->host->program, klass);
if (eat(FuToken::colon))
parseSymbolReference(&klass->baseClass);
else
klass->baseClass.name = "";
expect(FuToken::leftBrace);
while (!see(FuToken::rightBrace) && !see(FuToken::endOfFile)) {
doc = parseDoc();
Expand Down
22 changes: 10 additions & 12 deletions libfut.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1617,21 +1617,25 @@ public override void AcceptStatement(FuVisitor visitor)
public virtual bool IsNewString(bool substringOffset) => false;
}

public abstract class FuSymbol : FuExpr
public abstract class FuName : FuExpr
{

internal FuId Id = FuId.None;

internal string Name = "";

public override int GetLocLength() => this.Name.Length;
}

public abstract class FuSymbol : FuName
{

internal FuId Id = FuId.None;

internal FuSymbol Next;

internal FuScope Parent;

internal FuCodeDoc Documentation = null;

public override int GetLocLength() => this.Name.Length;

public override string ToString() => this.Name;
}

Expand Down Expand Up @@ -1916,17 +1920,13 @@ class FuImplicitEnumValue : FuExpr
public override int IntValue() => this.Value;
}

public class FuSymbolReference : FuExpr
public class FuSymbolReference : FuName
{

internal FuExpr Left = null;

internal string Name;

internal FuSymbol Symbol;

public override int GetLocLength() => this.Name.Length;

public override bool IsConstEnum() => this.Symbol.Parent is FuEnum;

public override int IntValue()
Expand Down Expand Up @@ -4461,8 +4461,6 @@ void ParseClass(FuCodeDoc doc, int line, int column, bool isPublic, FuCallType c
AddSymbol(this.Host.Program, klass);
if (Eat(FuToken.Colon))
ParseSymbolReference(klass.BaseClass);
else
klass.BaseClass.Name = "";
Expect(FuToken.LeftBrace);
while (!See(FuToken.RightBrace) && !See(FuToken.EndOfFile)) {
doc = ParseDoc();
Expand Down
20 changes: 14 additions & 6 deletions libfut.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ class FuCodeDoc;
class FuVisitor;
class FuStatement;
class FuExpr;
class FuName;
class FuSymbol;
class FuScope;
class FuAggregateInitializer;
Expand Down Expand Up @@ -687,17 +688,26 @@ class FuExpr : public FuStatement
std::shared_ptr<FuType> type;
};

class FuSymbol : public FuExpr
class FuName : public FuExpr
{
public:
virtual ~FuSymbol() = default;
virtual ~FuName() = default;
int getLocLength() const override;
protected:
FuName() = default;
public:
std::string name{""};
};

class FuSymbol : public FuName
{
public:
virtual ~FuSymbol() = default;
std::string toString() const override;
protected:
FuSymbol() = default;
public:
FuId id = FuId::none;
std::string name{""};
FuSymbol * next;
FuScope * parent;
std::shared_ptr<FuCodeDoc> documentation = nullptr;
Expand Down Expand Up @@ -857,12 +867,11 @@ class FuImplicitEnumValue : public FuExpr
int value;
};

class FuSymbolReference : public FuExpr
class FuSymbolReference : public FuName
{
public:
FuSymbolReference() = default;
virtual ~FuSymbolReference() = default;
int getLocLength() const override;
bool isConstEnum() const override;
int intValue() const override;
void accept(FuVisitor * visitor, FuPriority parent) const override;
Expand All @@ -871,7 +880,6 @@ class FuSymbolReference : public FuExpr
std::string toString() const override;
public:
std::shared_ptr<FuExpr> left = nullptr;
std::string name;
FuSymbol * symbol;
};

Expand Down
24 changes: 10 additions & 14 deletions libfut.js
Original file line number Diff line number Diff line change
Expand Up @@ -1543,18 +1543,22 @@ export class FuExpr extends FuStatement
}
}

export class FuSymbol extends FuExpr
export class FuName extends FuExpr
{
id = FuId.NONE;
name = "";
next;
parent;
documentation = null;

getLocLength()
{
return this.name.length;
}
}

export class FuSymbol extends FuName
{
id = FuId.NONE;
next;
parent;
documentation = null;

toString()
{
Expand Down Expand Up @@ -1909,17 +1913,11 @@ class FuImplicitEnumValue extends FuExpr
}
}

export class FuSymbolReference extends FuExpr
export class FuSymbolReference extends FuName
{
left = null;
name;
symbol;

getLocLength()
{
return this.name.length;
}

isConstEnum()
{
return this.symbol.parent instanceof FuEnum;
Expand Down Expand Up @@ -4668,8 +4666,6 @@ export class FuParser extends FuLexer
this.#addSymbol(this.host.program, klass);
if (this.eat(FuToken.COLON))
this.#parseSymbolReference(klass.baseClass);
else
klass.baseClass.name = "";
this.expect(FuToken.LEFT_BRACE);
while (!this.see(FuToken.RIGHT_BRACE) && !this.see(FuToken.END_OF_FILE)) {
doc = this.#parseDoc();
Expand Down

0 comments on commit ad6c819

Please sign in to comment.