Renamed sunWriter writing methods to match the command names in TSpcInterp.

This commit is contained in:
arookas 2015-12-28 20:35:16 -05:00
parent 2ce9882cad
commit 72ea2a031c
9 changed files with 171 additions and 181 deletions

View file

@ -118,9 +118,9 @@ namespace arookas {
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
Condition.Compile(context); Condition.Compile(context);
var falsePrologue = context.Text.GotoIfZero(); var falsePrologue = context.Text.WriteJNE();
TrueBody.Compile(context); TrueBody.Compile(context);
var trueEpilogue = context.Text.Goto(); var trueEpilogue = context.Text.WriteJMP();
context.Text.ClosePoint(falsePrologue); context.Text.ClosePoint(falsePrologue);
FalseBody.Compile(context); FalseBody.Compile(context);
context.Text.ClosePoint(trueEpilogue); context.Text.ClosePoint(trueEpilogue);

View file

@ -12,11 +12,11 @@ namespace arookas {
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
Condition.Compile(context); Condition.Compile(context);
var trueBodyEpilogue = context.Text.GotoIfZero(); var trueBodyEpilogue = context.Text.WriteJNE();
TrueBody.Compile(context); TrueBody.Compile(context);
var falseBody = FalseBody; var falseBody = FalseBody;
if (falseBody != null) { if (falseBody != null) {
var falseBodyEpilogue = context.Text.Goto(); var falseBodyEpilogue = context.Text.WriteJMP();
context.Text.ClosePoint(trueBodyEpilogue); context.Text.ClosePoint(trueBodyEpilogue);
falseBody.Compile(context); falseBody.Compile(context);
context.Text.ClosePoint(falseBodyEpilogue); context.Text.ClosePoint(falseBodyEpilogue);
@ -54,9 +54,9 @@ namespace arookas {
var bodyPrologue = context.Text.OpenPoint(); var bodyPrologue = context.Text.OpenPoint();
var continuePoint = context.Text.OpenPoint(); var continuePoint = context.Text.OpenPoint();
Condition.Compile(context); Condition.Compile(context);
var bodyEpilogue = context.Text.GotoIfZero(); var bodyEpilogue = context.Text.WriteJNE();
Body.Compile(context); Body.Compile(context);
context.Text.Goto(bodyPrologue); context.Text.WriteJMP(bodyPrologue);
context.Text.ClosePoint(bodyEpilogue); context.Text.ClosePoint(bodyEpilogue);
var breakPoint = context.Text.OpenPoint(); var breakPoint = context.Text.OpenPoint();
context.Loops.Pop(context, breakPoint, continuePoint); context.Loops.Pop(context, breakPoint, continuePoint);
@ -76,8 +76,8 @@ namespace arookas {
Body.Compile(context); Body.Compile(context);
var continuePoint = context.Text.OpenPoint(); var continuePoint = context.Text.OpenPoint();
Condition.Compile(context); Condition.Compile(context);
var bodyEpilogue = context.Text.GotoIfZero(); var bodyEpilogue = context.Text.WriteJNE();
context.Text.Goto(bodyPrologue); context.Text.WriteJMP(bodyPrologue);
context.Text.ClosePoint(bodyEpilogue); context.Text.ClosePoint(bodyEpilogue);
var breakPoint = context.Text.OpenPoint(); var breakPoint = context.Text.OpenPoint();
context.Loops.Pop(context, breakPoint, continuePoint); context.Loops.Pop(context, breakPoint, continuePoint);
@ -99,11 +99,11 @@ namespace arookas {
TryCompile(Declaration, context); TryCompile(Declaration, context);
var bodyPrologue = context.Text.OpenPoint(); var bodyPrologue = context.Text.OpenPoint();
TryCompile(Condition, context); TryCompile(Condition, context);
var bodyEpilogue = context.Text.GotoIfZero(); var bodyEpilogue = context.Text.WriteJNE();
Body.Compile(context); Body.Compile(context);
var continuePoint = context.Text.OpenPoint(); var continuePoint = context.Text.OpenPoint();
TryCompile(Iteration, context); TryCompile(Iteration, context);
context.Text.Goto(bodyPrologue); context.Text.WriteJMP(bodyPrologue);
context.Text.ClosePoint(bodyEpilogue); context.Text.ClosePoint(bodyEpilogue);
var breakPoint = context.Text.OpenPoint(); var breakPoint = context.Text.OpenPoint();
context.Loops.Pop(context, breakPoint, continuePoint); context.Loops.Pop(context, breakPoint, continuePoint);
@ -133,10 +133,10 @@ namespace arookas {
var expression = Expression; var expression = Expression;
if (expression != null) { if (expression != null) {
expression.Compile(context); expression.Compile(context);
context.Text.ReturnValue(); context.Text.WriteRET();
} }
else { else {
context.Text.ReturnVoid(); context.Text.WriteRET0();
} }
} }
} }
@ -149,7 +149,7 @@ namespace arookas {
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
var point = context.Text.Goto(); var point = context.Text.WriteJMP();
if (!context.Loops.AddBreak(point, IsNamed ? NameLabel.Value : null)) { if (!context.Loops.AddBreak(point, IsNamed ? NameLabel.Value : null)) {
throw new sunBreakException(this); throw new sunBreakException(this);
} }
@ -164,7 +164,7 @@ namespace arookas {
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
var point = context.Text.Goto(); var point = context.Text.WriteJMP();
if (!context.Loops.AddContinue(point, IsNamed ? NameLabel.Value : null)) { if (!context.Loops.AddContinue(point, IsNamed ? NameLabel.Value : null)) {
throw new sunContinueException(this); throw new sunContinueException(this);
} }

View file

@ -44,7 +44,7 @@ namespace arookas {
Arguments.Compile(context); Arguments.Compile(context);
callableInfo.OpenCallSite(context, Arguments.Count); callableInfo.OpenCallSite(context, Arguments.Count);
if (IsStatement) { if (IsStatement) {
context.Text.Pop(); context.Text.WritePOP();
} }
} }

View file

@ -13,7 +13,7 @@ namespace arookas {
protected sunIntLiteral(sunSourceLocation location) protected sunIntLiteral(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.PushInt(Value); } public override void Compile(sunContext context) { context.Text.WriteINT(Value); }
sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) { sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) {
return sunExpressionFlags.Literals; return sunExpressionFlags.Literals;
@ -42,7 +42,7 @@ namespace arookas {
} }
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
context.Text.PushFloat(Value); context.Text.WriteFLT(Value);
} }
sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) { sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) {
@ -57,7 +57,7 @@ namespace arookas {
} }
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
context.Text.PushData(context.DataTable.Add(Value)); context.Text.WriteSTR(context.DataTable.Add(Value));
} }
// string unescaping utility // string unescaping utility

View file

@ -24,7 +24,7 @@ namespace arookas {
public sunLogOR(sunSourceLocation location) public sunLogOR(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.LogOR(); } public override void Compile(sunContext context) { context.Text.WriteOR(); }
} }
// precedence 1 // precedence 1
@ -34,7 +34,7 @@ namespace arookas {
public sunLogAND(sunSourceLocation location) public sunLogAND(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.LogAND(); } public override void Compile(sunContext context) { context.Text.WriteAND(); }
} }
// precedence 2 // precedence 2
@ -44,7 +44,7 @@ namespace arookas {
public sunBitOR(sunSourceLocation location) public sunBitOR(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.BitOR(); } public override void Compile(sunContext context) { context.Text.WriteBOR(); }
} }
// precedence 3 // precedence 3
@ -54,7 +54,7 @@ namespace arookas {
public sunBitAND(sunSourceLocation location) public sunBitAND(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.BitAND(); } public override void Compile(sunContext context) { context.Text.WriteBAND(); }
} }
// precedence 4 // precedence 4
@ -64,7 +64,7 @@ namespace arookas {
public sunEq(sunSourceLocation location) public sunEq(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.Eq(); } public override void Compile(sunContext context) { context.Text.WriteEQ(); }
} }
class sunNtEq : sunOperator { class sunNtEq : sunOperator {
@ -73,7 +73,7 @@ namespace arookas {
public sunNtEq(sunSourceLocation location) public sunNtEq(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.NtEq(); } public override void Compile(sunContext context) { context.Text.WriteNE(); }
} }
// precedence 5 // precedence 5
@ -83,7 +83,7 @@ namespace arookas {
public sunLt(sunSourceLocation location) public sunLt(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.Lt(); } public override void Compile(sunContext context) { context.Text.WriteLT(); }
} }
class sunLtEq : sunOperator { class sunLtEq : sunOperator {
@ -92,7 +92,7 @@ namespace arookas {
public sunLtEq(sunSourceLocation location) public sunLtEq(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.LtEq(); } public override void Compile(sunContext context) { context.Text.WriteLE(); }
} }
class sunGt : sunOperator { class sunGt : sunOperator {
@ -101,7 +101,7 @@ namespace arookas {
public sunGt(sunSourceLocation location) public sunGt(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.Gt(); } public override void Compile(sunContext context) { context.Text.WriteGT(); }
} }
class sunGtEq : sunOperator { class sunGtEq : sunOperator {
@ -110,7 +110,7 @@ namespace arookas {
public sunGtEq(sunSourceLocation location) public sunGtEq(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.GtEq(); } public override void Compile(sunContext context) { context.Text.WriteGE(); }
} }
// precedence 6 // precedence 6
@ -120,7 +120,7 @@ namespace arookas {
public sunBitLsh(sunSourceLocation location) public sunBitLsh(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.ShL(); } public override void Compile(sunContext context) { context.Text.WriteSHL(); }
} }
class sunBitRsh : sunOperator { class sunBitRsh : sunOperator {
@ -129,7 +129,7 @@ namespace arookas {
public sunBitRsh(sunSourceLocation location) public sunBitRsh(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.ShR(); } public override void Compile(sunContext context) { context.Text.WriteSHR(); }
} }
// precedence 7 // precedence 7
@ -139,7 +139,7 @@ namespace arookas {
public sunAdd(sunSourceLocation location) public sunAdd(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.Add(); } public override void Compile(sunContext context) { context.Text.WriteADD(); }
} }
class sunSub : sunOperator { class sunSub : sunOperator {
@ -148,7 +148,7 @@ namespace arookas {
public sunSub(sunSourceLocation location) public sunSub(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.Sub(); } public override void Compile(sunContext context) { context.Text.WriteSUB(); }
} }
// precedence 8 // precedence 8
@ -158,7 +158,7 @@ namespace arookas {
public sunMul(sunSourceLocation location) public sunMul(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.Mul(); } public override void Compile(sunContext context) { context.Text.WriteMUL(); }
} }
class sunDiv : sunOperator { class sunDiv : sunOperator {
@ -167,7 +167,7 @@ namespace arookas {
public sunDiv(sunSourceLocation location) public sunDiv(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.Div(); } public override void Compile(sunContext context) { context.Text.WriteDIV(); }
} }
class sunMod : sunOperator { class sunMod : sunOperator {
@ -176,7 +176,7 @@ namespace arookas {
public sunMod(sunSourceLocation location) public sunMod(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.Mod(); } public override void Compile(sunContext context) { context.Text.WriteMOD(); }
} }
// precedence 9 // precedence 9
@ -186,7 +186,7 @@ namespace arookas {
public sunLogNOT(sunSourceLocation location) public sunLogNOT(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.LogNOT(); } public override void Compile(sunContext context) { context.Text.WriteNOT(); }
} }
class sunNeg : sunOperator { class sunNeg : sunOperator {
public override int Precedence { get { return 9; } } public override int Precedence { get { return 9; } }
@ -194,7 +194,7 @@ namespace arookas {
public sunNeg(sunSourceLocation location) public sunNeg(sunSourceLocation location)
: base(location) { } : base(location) { }
public override void Compile(sunContext context) { context.Text.Neg(); } public override void Compile(sunContext context) { context.Text.WriteNEG(); }
} }
// assignment operators // assignment operators
@ -218,7 +218,7 @@ namespace arookas {
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
symbol.CompileGet(context); symbol.CompileGet(context);
expression.Compile(context); expression.Compile(context);
context.Text.Add(); context.Text.WriteADD();
symbol.CompileSet(context); symbol.CompileSet(context);
} }
} }
@ -230,7 +230,7 @@ namespace arookas {
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
symbol.CompileGet(context); symbol.CompileGet(context);
expression.Compile(context); expression.Compile(context);
context.Text.Sub(); context.Text.WriteSUB();
symbol.CompileSet(context); symbol.CompileSet(context);
} }
} }
@ -242,7 +242,7 @@ namespace arookas {
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
symbol.CompileGet(context); symbol.CompileGet(context);
expression.Compile(context); expression.Compile(context);
context.Text.Mul(); context.Text.WriteMUL();
symbol.CompileSet(context); symbol.CompileSet(context);
} }
} }
@ -254,7 +254,7 @@ namespace arookas {
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
symbol.CompileGet(context); symbol.CompileGet(context);
expression.Compile(context); expression.Compile(context);
context.Text.Div(); context.Text.WriteDIV();
symbol.CompileSet(context); symbol.CompileSet(context);
} }
} }
@ -266,7 +266,7 @@ namespace arookas {
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
symbol.CompileGet(context); symbol.CompileGet(context);
expression.Compile(context); expression.Compile(context);
context.Text.Mod(); context.Text.WriteMOD();
symbol.CompileSet(context); symbol.CompileSet(context);
} }
} }
@ -278,7 +278,7 @@ namespace arookas {
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
symbol.CompileGet(context); symbol.CompileGet(context);
expression.Compile(context); expression.Compile(context);
context.Text.BitAND(); context.Text.WriteBAND();
symbol.CompileSet(context); symbol.CompileSet(context);
} }
} }
@ -290,7 +290,7 @@ namespace arookas {
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
symbol.CompileGet(context); symbol.CompileGet(context);
expression.Compile(context); expression.Compile(context);
context.Text.BitOR(); context.Text.WriteBOR();
symbol.CompileSet(context); symbol.CompileSet(context);
} }
} }
@ -302,7 +302,7 @@ namespace arookas {
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
symbol.CompileGet(context); symbol.CompileGet(context);
expression.Compile(context); expression.Compile(context);
context.Text.ShL(); context.Text.WriteSHL();
symbol.CompileSet(context); symbol.CompileSet(context);
} }
} }
@ -314,7 +314,7 @@ namespace arookas {
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
symbol.CompileGet(context); symbol.CompileGet(context);
expression.Compile(context); expression.Compile(context);
context.Text.ShR(); context.Text.WriteSHR();
symbol.CompileSet(context); symbol.CompileSet(context);
} }
} }

View file

@ -5,8 +5,8 @@
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
var builtinInfo = context.ResolveSystemBuiltin("yield"); var builtinInfo = context.ResolveSystemBuiltin("yield");
context.Text.CallBuiltin(builtinInfo.Index, 0); context.Text.WriteFUNC(builtinInfo.Index, 0);
context.Text.Pop(); context.Text.WritePOP();
} }
} }
@ -16,8 +16,8 @@
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
var builtinInfo = context.ResolveSystemBuiltin("exit"); var builtinInfo = context.ResolveSystemBuiltin("exit");
context.Text.CallBuiltin(builtinInfo.Index, 0); context.Text.WriteFUNC(builtinInfo.Index, 0);
context.Text.Pop(); context.Text.WritePOP();
} }
} }
@ -27,8 +27,8 @@
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
var builtinInfo = context.ResolveSystemBuiltin("dump"); var builtinInfo = context.ResolveSystemBuiltin("dump");
context.Text.CallBuiltin(builtinInfo.Index, 0); context.Text.WriteFUNC(builtinInfo.Index, 0);
context.Text.Pop(); context.Text.WritePOP();
} }
} }
@ -38,8 +38,8 @@
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
var builtinInfo = context.ResolveSystemBuiltin("lock"); var builtinInfo = context.ResolveSystemBuiltin("lock");
context.Text.CallBuiltin(builtinInfo.Index, 0); context.Text.WriteFUNC(builtinInfo.Index, 0);
context.Text.Pop(); context.Text.WritePOP();
} }
} }
@ -49,8 +49,8 @@
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
var builtinInfo = context.ResolveSystemBuiltin("unlock"); var builtinInfo = context.ResolveSystemBuiltin("unlock");
context.Text.CallBuiltin(builtinInfo.Index, 0); context.Text.WriteFUNC(builtinInfo.Index, 0);
context.Text.Pop(); context.Text.WritePOP();
} }
} }
@ -62,7 +62,7 @@
protected void Compile(sunContext context, sunBuiltinSymbol symbol) { protected void Compile(sunContext context, sunBuiltinSymbol symbol) {
Argument.Compile(context); Argument.Compile(context);
context.Text.CallBuiltin(symbol.Index, 1); context.Text.WriteFUNC(symbol.Index, 1);
} }
sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) { sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) {
@ -106,8 +106,8 @@
public override void Compile(sunContext context) { public override void Compile(sunContext context) {
var builtinInfo = context.ResolveSystemBuiltin("print"); var builtinInfo = context.ResolveSystemBuiltin("print");
ArgumentList.Compile(context); ArgumentList.Compile(context);
context.Text.CallBuiltin(builtinInfo.Index, ArgumentList.Count); context.Text.WriteFUNC(builtinInfo.Index, ArgumentList.Count);
context.Text.Pop(); context.Text.WritePOP();
} }
} }
} }

View file

@ -26,7 +26,7 @@ namespace arookas {
if (result != sunImportResult.Loaded) { if (result != sunImportResult.Loaded) {
throw new sunImportException(name, result); throw new sunImportException(name, result);
} }
context.Text.Terminate(); // NOTETOSELF: don't do this via sunNode.Compile because imported files will add this as well context.Text.WriteEND(); // NOTETOSELF: don't do this via sunNode.Compile because imported files will add this as well
foreach (var function in context.SymbolTable.Functions) { foreach (var function in context.SymbolTable.Functions) {
function.Compile(context); function.Compile(context);
} }

View file

@ -99,7 +99,7 @@ namespace arookas {
throw new InvalidOperationException("Cannot compile builtins."); throw new InvalidOperationException("Cannot compile builtins.");
} }
public override void OpenCallSite(sunContext context, int argumentCount) { public override void OpenCallSite(sunContext context, int argumentCount) {
context.Text.CallBuiltin(Index, argumentCount); context.Text.WriteFUNC(Index, argumentCount);
} }
public override void CloseCallSites(sunContext context) { } public override void CloseCallSites(sunContext context) { }
} }
@ -124,14 +124,14 @@ namespace arookas {
foreach (var parameter in Parameters) { foreach (var parameter in Parameters) {
context.Scopes.DeclareVariable(parameter); // since there is no AST node for these, they won't affect MaxLocalCount context.Scopes.DeclareVariable(parameter); // since there is no AST node for these, they won't affect MaxLocalCount
} }
context.Text.StoreDisplay(1); context.Text.WriteMKDS(1);
context.Text.DeclareLocal(Body.MaxLocalCount); context.Text.WriteMKFR(Body.MaxLocalCount);
Body.Compile(context); Body.Compile(context);
context.Text.ReturnVoid(); context.Text.WriteRET0();
context.Scopes.Pop(); context.Scopes.Pop();
} }
public override void OpenCallSite(sunContext context, int argumentCount) { public override void OpenCallSite(sunContext context, int argumentCount) {
var point = context.Text.CallFunction(argumentCount); var point = context.Text.WriteCALL(argumentCount);
CallSites.Add(point); CallSites.Add(point);
} }
public override void CloseCallSites(sunContext context) { public override void CloseCallSites(sunContext context) {
@ -178,13 +178,13 @@ namespace arookas {
public abstract void CompileSet(sunContext context); public abstract void CompileSet(sunContext context);
public virtual void CompileInc(sunContext context) { public virtual void CompileInc(sunContext context) {
CompileGet(context); CompileGet(context);
context.Text.PushInt(1); context.Text.WriteINT(1);
context.Text.Add(); context.Text.WriteADD();
} }
public virtual void CompileDec(sunContext context) { public virtual void CompileDec(sunContext context) {
CompileGet(context); CompileGet(context);
context.Text.PushInt(1); context.Text.WriteINT(1);
context.Text.Sub(); context.Text.WriteSUB();
} }
} }
@ -202,10 +202,10 @@ namespace arookas {
Index = index; Index = index;
} }
public override void CompileGet(sunContext context) { context.Text.PushVariable(Display, Index); } public override void CompileGet(sunContext context) { context.Text.WriteVAR(Display, Index); }
public override void CompileSet(sunContext context) { context.Text.StoreVariable(Display, Index); } public override void CompileSet(sunContext context) { context.Text.WriteASS(Display, Index); }
public override void CompileInc(sunContext context) { context.Text.IncVariable(Display, Index); } public override void CompileInc(sunContext context) { context.Text.WriteINC(Display, Index); }
public override void CompileDec(sunContext context) { context.Text.DecVariable(Display, Index); } public override void CompileDec(sunContext context) { context.Text.WriteDEC(Display, Index); }
} }
class sunConstantSymbol : sunStorableSymbol { class sunConstantSymbol : sunStorableSymbol {

View file

@ -2,153 +2,143 @@
namespace arookas { namespace arookas {
class sunWriter { class sunWriter {
aBinaryWriter writer; aBinaryWriter mWriter;
public uint Offset { get { return (uint)writer.Position; } } public uint Offset { get { return (uint)mWriter.Position; } }
public sunWriter(aBinaryWriter writer) { public sunWriter(aBinaryWriter writer) {
this.writer = writer; this.mWriter = writer;
} }
public sunPoint OpenPoint() { return new sunPoint(Offset); } public sunPoint OpenPoint() { return new sunPoint(Offset); }
public void ClosePoint(sunPoint point) { ClosePoint(point, (uint)writer.Position); } public void ClosePoint(sunPoint point) { ClosePoint(point, (uint)mWriter.Position); }
public void ClosePoint(sunPoint point, uint offset) { public void ClosePoint(sunPoint point, uint offset) {
writer.Keep(); mWriter.Keep();
writer.Goto(point.Offset); mWriter.Goto(point.Offset);
writer.Write32(offset); mWriter.Write32(offset);
writer.Back(); mWriter.Back();
} }
public void PushInt(int value) { public void WriteINT(int value) {
switch (value) { // shortcut commands switch (value) { // shortcut commands
case 0: writer.Write8(0x25); return; case 0: WriteINT0(); return;
case 1: writer.Write8(0x26); return; case 1: WriteINT1(); return;
} }
writer.Write8(0x00); mWriter.Write8(0x00);
writer.WriteS32(value); mWriter.WriteS32(value);
} }
public void PushFloat(float value) { public void WriteFLT(float value) {
writer.Write8(0x01); mWriter.Write8(0x01);
writer.WriteF32(value); mWriter.WriteF32(value);
} }
public void PushData(int dataIndex) { public void WriteSTR(int index) {
writer.Write8(0x02); mWriter.Write8(0x02);
writer.WriteS32(dataIndex); mWriter.WriteS32(index);
} }
public void PushAddress(int value) { public void WriteADR(int value) {
writer.Write8(0x03); mWriter.Write8(0x03);
writer.WriteS32(value); mWriter.WriteS32(value);
} }
public void PushVariable(sunVariableSymbol variableInfo) { PushVariable(variableInfo.Display, variableInfo.Index); } public void WriteVAR(int display, int index) {
public void PushVariable(int display, int variableIndex) { mWriter.Write8(0x04);
writer.Write8(0x04); mWriter.WriteS32(display);
writer.WriteS32(display); mWriter.WriteS32(index);
writer.WriteS32(variableIndex);
} }
public void Nop() { writer.Write8(0x05); } public void WriteNOP() { mWriter.Write8(0x05); }
public void IncVariable(sunVariableSymbol variableInfo) { IncVariable(variableInfo.Display, variableInfo.Index); } public void WriteINC(int display, int index) {
public void DecVariable(sunVariableSymbol variableInfo) { DecVariable(variableInfo.Display, variableInfo.Index); } mWriter.Write8(0x06);
public void IncVariable(int display, int variableIndex) { mWriter.WriteS32(display);
writer.Write8(0x06); mWriter.WriteS32(index);
writer.WriteS32(display);
writer.WriteS32(variableIndex);
} }
public void DecVariable(int display, int variableIndex) { public void WriteDEC(int display, int index) {
writer.Write8(0x07); mWriter.Write8(0x07);
writer.WriteS32(display); mWriter.WriteS32(display);
writer.WriteS32(variableIndex); mWriter.WriteS32(index);
} }
public void WriteADD() { mWriter.Write8(0x08); }
public void Add() { writer.Write8(0x08); } public void WriteSUB() { mWriter.Write8(0x09); }
public void Sub() { writer.Write8(0x09); } public void WriteMUL() { mWriter.Write8(0x0A); }
public void Mul() { writer.Write8(0x0A); } public void WriteDIV() { mWriter.Write8(0x0B); }
public void Div() { writer.Write8(0x0B); } public void WriteMOD() { mWriter.Write8(0x0C); }
public void Mod() { writer.Write8(0x0C); } public void WriteASS(int display, int index) {
mWriter.Write8(0x0D);
public void StoreVariable(sunVariableSymbol variableInfo) { StoreVariable(variableInfo.Display, variableInfo.Index); } mWriter.Write8(0x04); // unused (skipped over by TSpcInterp)
public void StoreVariable(int display, int variableIndex) { mWriter.WriteS32(display);
writer.Write8(0x0D); mWriter.WriteS32(index);
writer.Write8(0x04); // unused (skipped over by TSpcInterp)
writer.WriteS32(display);
writer.WriteS32(variableIndex);
} }
public void WriteEQ() { mWriter.Write8(0x0E); }
public void Eq() { writer.Write8(0x0E); } public void WriteNE() { mWriter.Write8(0x0F); }
public void NtEq() { writer.Write8(0x0F); } public void WriteGT() { mWriter.Write8(0x10); }
public void Gt() { writer.Write8(0x10); } public void WriteLT() { mWriter.Write8(0x11); }
public void Lt() { writer.Write8(0x11); } public void WriteGE() { mWriter.Write8(0x12); }
public void GtEq() { writer.Write8(0x12); } public void WriteLE() { mWriter.Write8(0x13); }
public void LtEq() { writer.Write8(0x13); } public void WriteNEG() { mWriter.Write8(0x14); }
public void Neg() { writer.Write8(0x14); } public void WriteNOT() { mWriter.Write8(0x15); }
public void LogNOT() { writer.Write8(0x15); } public void WriteAND() { mWriter.Write8(0x16); }
public void LogAND() { writer.Write8(0x16); } public void WriteOR() { mWriter.Write8(0x17); }
public void LogOR() { writer.Write8(0x17); } public void WriteBAND() { mWriter.Write8(0x18); }
public void BitAND() { writer.Write8(0x18); } public void WriteBOR() { mWriter.Write8(0x19); }
public void BitOR() { writer.Write8(0x19); } public void WriteSHL() { mWriter.Write8(0x1A); }
public void ShL() { writer.Write8(0x1A); } public void WriteSHR() { mWriter.Write8(0x1B); }
public void ShR() { writer.Write8(0x1B); } public sunPoint WriteCALL(int count) {
mWriter.Write8(0x1C);
public sunPoint CallFunction(int argumentCount) {
writer.Write8(0x1C);
sunPoint point = OpenPoint(); sunPoint point = OpenPoint();
writer.Write32(0); // dummy mWriter.Write32(0); // dummy
writer.WriteS32(argumentCount); mWriter.WriteS32(count);
return point; return point;
} }
public void CallFunction(sunPoint point, int argumentCount) { public void WriteCALL(sunPoint point, int count) {
writer.Write8(0x1C); mWriter.Write8(0x1C);
writer.Write32(point.Offset); mWriter.Write32(point.Offset);
writer.WriteS32(argumentCount); mWriter.WriteS32(count);
} }
public void CallBuiltin(int symbolIndex, int argumentCount) { public void WriteFUNC(int index, int count) {
writer.Write8(0x1D); mWriter.Write8(0x1D);
writer.WriteS32(symbolIndex); mWriter.WriteS32(index);
writer.WriteS32(argumentCount); mWriter.WriteS32(count);
} }
public void WriteMKFR(int count) {
public void DeclareLocal(int count) { mWriter.Write8(0x1E);
writer.Write8(0x1E); mWriter.WriteS32(count);
writer.WriteS32(count);
} }
public void StoreDisplay(int display) { public void WriteMKDS(int display) {
writer.Write8(0x1F); mWriter.Write8(0x1F);
writer.WriteS32(display); mWriter.WriteS32(display);
} }
public void WriteRET() { mWriter.Write8(0x20); }
public void ReturnValue() { writer.Write8(0x20); } public void WriteRET0() { mWriter.Write8(0x21); }
public void ReturnVoid() { writer.Write8(0x21); } public sunPoint WriteJNE() {
mWriter.Write8(0x22);
public sunPoint GotoIfZero() {
writer.Write8(0x22);
sunPoint point = OpenPoint(); sunPoint point = OpenPoint();
writer.Write32(0); // dummy mWriter.Write32(0); // dummy
return point; return point;
} }
public sunPoint Goto() { public sunPoint WriteJMP() {
writer.Write8(0x23); mWriter.Write8(0x23);
sunPoint point = OpenPoint(); sunPoint point = OpenPoint();
writer.Write32(0); // dummy mWriter.Write32(0); // dummy
return point; return point;
} }
public void GotoIfZero(sunPoint point) { public void WriteJNE(sunPoint point) {
writer.Write8(0x22); mWriter.Write8(0x22);
writer.Write32(point.Offset); mWriter.Write32(point.Offset);
} }
public void Goto(sunPoint point) { public void WriteJMP(sunPoint point) {
writer.Write8(0x23); mWriter.Write8(0x23);
writer.Write32(point.Offset); mWriter.Write32(point.Offset);
} }
public void Pop() { writer.Write8(0x24); } public void WritePOP() { mWriter.Write8(0x24); }
public void WriteINT0() { mWriter.Write8(0x25); }
public void Terminate() { writer.Write8(0x27); } public void WriteINT1() { mWriter.Write8(0x26); }
public void WriteEND() { mWriter.Write8(0x27); }
} }
struct sunPoint { struct sunPoint {
readonly uint offset; readonly uint mOffset;
public uint Offset { get { return offset; } } public uint Offset { get { return mOffset; } }
public sunPoint(uint offset) { public sunPoint(uint offset) {
this.offset = offset; mOffset = offset;
} }
} }
} }